<!DOCTYPE HTML>
<!--
	Dimension by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
 <head>
  <title>
   Dimension by HTML5 UP
  </title>
  <!-- <meta charset="utf-8" /> -->
  <!-- <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> -->
  <meta charset="utf-8"/>
  <meta content="width=device-width,initial-scale=1.0" name="viewport"/>
  <link href="../../assets/css/article.css" rel="stylesheet"/>
  <link href="https://cdn.bootcss.com/highlight.js/9.15.8/styles/github.min.css" rel="stylesheet"/>
  <noscript>
   <link href="../../assets/css/noscript.css" rel="stylesheet"/>
  </noscript>
 </head>
 <body>
  <div id="app">
  </div>
  <!-- built files will be auto injected -->
 </body>
 <body class="is-preload">
  <!-- Wrapper -->
  <div id="wrapper">
   <!-- Main -->
   <div id="main">
    <article id="article">
     <h1 id="maven">
      Maven 阿里云仓库使用小技巧
     </h1>
     <hr/>
     <p>
      这是我参与2022首次更文挑战的第26天，活动详情查看：
      <a href="https://juejin.cn/post/7052884569032392740">
       2022首次更文挑战
      </a>
     </p>
     <h2 id="_1">
      简介
     </h2>
     <p>
      平时工作或者学习中经常需要看下别人的工程示例代码，但maven的依赖导入经常有些问题，maven镜像使用默认是国外的，众所周知慢的离谱，有时候出门散个步回来，还没有导入完成，导致摸鱼时间过多。
     </p>
     <p>
      使用国内的镜像那就会快非常非常多，快则两三分钟、慢则十多分钟，可以接受。但在使用的过程中也会遇到许多问题，比如设置和依赖找不到的问题，下面介绍下自己使用阿里云的一些技巧，希望对大家有所启发
     </p>
     <h3 id="_2">
      阿里云仓库配置
     </h3>
     <p>
      第一步是配置镜像仓库为阿里云，有两种配置方法，一个是全局配置，另一个是单个工程配置
     </p>
     <p>
      推荐使用全局配置，新建两个全局配置文件，配合idea进行切换就比较方便好用
     </p>
     <h4 id="_3">
      全局配置
     </h4>
     <p>
      使用进入maven安装位置的conf目录下，复制一份 setting.xml,命名为 setting.aliyun.xml，打开文件，在
      <mirrors>
      </mirrors>
      标签中添加 mirror 子节点，在里面添加如下内容,大致如下：
     </p>
     <div class="codehilite">
      <pre><span></span><code><span class="nt">&lt;mirrors&gt;</span>
    <span class="c">&lt;!-- mirror</span>
<span class="c">     | Specifies a repository mirror site to use instead of a given repository. The repository that</span>
<span class="c">     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used</span>
<span class="c">     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.</span>
<span class="c">     |</span>
<span class="c">    &lt;mirror&gt;</span>
<span class="c">      &lt;id&gt;mirrorId&lt;/id&gt;</span>
<span class="c">      &lt;mirrorOf&gt;repositoryId&lt;/mirrorOf&gt;</span>
<span class="c">      &lt;name&gt;Human Readable Name for this Mirror.&lt;/name&gt;</span>
<span class="c">      &lt;url&gt;http://my.repository.com/repo/path&lt;/url&gt;</span>
<span class="c">    &lt;/mirror&gt;</span>
<span class="c">     --&gt;</span>
    <span class="nt">&lt;mirror&gt;</span>
        <span class="nt">&lt;id&gt;</span>aliyunmaven-pulic<span class="nt">&lt;/id&gt;</span>
        <span class="nt">&lt;mirrorOf&gt;</span>*<span class="nt">&lt;/mirrorOf&gt;</span>
        <span class="nt">&lt;name&gt;</span>aliyun-public<span class="nt">&lt;/name&gt;</span>
        <span class="nt">&lt;url&gt;</span>https://maven.aliyun.com/repository/public<span class="nt">&lt;/url&gt;</span>
     <span class="nt">&lt;/mirror&gt;</span>

  <span class="nt">&lt;/mirrors&gt;</span>
</code></pre>
     </div>
     <h4 id="pomxml">
      单个 pom.xml 配置
     </h4>
     <p>
      这个相对而言影响范围比较小，就针对单个 pom.xml 的配置，使用起来也算可以，但个人感觉没有上面那个全，有些时候需要使用多个代理仓库，配置起来稍微麻烦一些，在后面的参考链接中有阿里云的官方配置说明，各位也可自行探索，这块研究的比较少
     </p>
     <div class="codehilite">
      <pre><span></span><code><span class="nt">&lt;repository&gt;</span>
  <span class="nt">&lt;id&gt;</span>spring<span class="nt">&lt;/id&gt;</span>
  <span class="nt">&lt;url&gt;</span>https://maven.aliyun.com/repository/spring<span class="nt">&lt;/url&gt;</span>
  <span class="nt">&lt;releases&gt;</span>
    <span class="nt">&lt;enabled&gt;</span>true<span class="nt">&lt;/enabled&gt;</span>
  <span class="nt">&lt;/releases&gt;</span>
  <span class="nt">&lt;snapshots&gt;</span>
    <span class="nt">&lt;enabled&gt;</span>true<span class="nt">&lt;/enabled&gt;</span>
  <span class="nt">&lt;/snapshots&gt;</span>
<span class="nt">&lt;/repository&gt;</span>
</code></pre>
     </div>
     <h3 id="idea">
      IDEA 的切换配合使用
     </h3>
     <p>
      配置完成后，在 IDEA 中进行配置，即可实现国内源和国外源的切换使用，大致的配置如下：
     </p>
     <p>
      <img alt="" src="./picture/idea_maven.png"/>
     </p>
     <p>
      按照上图进入 IDEA 的 Maven 配置界面，图中的 1 配置 Maven 的根路径；2 是配置文件配置，这里就可以随意切换不同的配置文件；3是依赖下载存放的路径
     </p>
     <p>
      配置完成后基本就可以使用了，使用阿里云的话依赖很快就导入完成了
     </p>
     <h3 id="_4">
      依赖缺失的一些解决小技巧
     </h3>
     <p>
      在依赖导入的时候，经常会遇到 xxxx:xxxx:pom 之类找不到，下载不了的情况，而且有些情况切换到国外源又是可以正常下载的，但又很慢，则就很烦，经过探索，大部分的依赖无法下载问题可以通过直接指定特定版本进行解决，下面是一个示例：
     </p>
     <p>
      如下，我们在依赖导入的时候遇到下面这种类似的问题，依赖找不到，这个时候解决的办法就是指定特定的依赖版本，具体的细节在后面
     </p>
     <div class="codehilite">
      <pre><span></span><code><span class="err">Could not find artifact org.codehaus.mojo:flatten-maven-plugin:pom: in aliyunmaven-pulic (https://maven.aliyun.com/repository/public)</span>
</code></pre>
     </div>
     <p>
      解决这类问题主要是在阿里云仓库中查找到依赖的版本，然后在配置文件中指定或者修改依赖版本即可
     </p>
     <p>
      首先打开阿里云仓库搜索地址：
      <a href="https://maven.aliyun.com/mvn/search">
       https://maven.aliyun.com/mvn/search
      </a>
      , 如下图：
     </p>
     <p>
      <img alt="" src="./picture/aliyun_maven_search.png"/>
     </p>
     <p>
      在上面的搜索中在右侧可以填入报错的依赖的 group 和 artifact，然后就搜索，看到下面有很多版本，选择一个看起来顺眼的填入即可（大部分版本其实都一样）。在左侧也可以切换搜索方式，可以直接输入一些关键字，如 latten-maven-plugin 之类的，辨识度比较高的话，使用关键字搜索即可；如果没有找到，则可以使用 gav 这种比较全的搜索方法
     </p>
     <p>
      这样基本上能解决大部分问题了，希望对大家有所帮助
     </p>
    </article>
   </div>
   <!-- Footer -->
   <footer id="footer">
    <p class="copyright">
     © Untitled. Design:
     <a href="https://html5up.net">
      HTML5 UP
     </a>
     .
    </p>
   </footer>
  </div>
  <!-- BG -->
  <div id="bg">
  </div>
  <!-- Scripts -->
  <script src="../assets/js/jquery.min.js">
  </script>
  <script src="../assets/js/browser.min.js">
  </script>
  <script src="../assets/js/breakpoints.min.js">
  </script>
  <script src="../assets/js/util.js">
  </script>
  <script src="../assets/js/main.js">
  </script>
 </body>
</html>
